home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / m68k / 68343ffp.arc / FFPIEEE.SA < prev    next >
Text File  |  1989-08-30  |  11KB  |  224 lines

  1.          TTL       FFPIEEE CONVERSIONS TO/FROM FFP (FFPTIEEE,FFPFIEEE)
  2. ******************************************
  3. *  (C)  COPYRIGHT 1981 BY MOTOROLA INC.  *
  4. ******************************************
  5.  
  6. ****************************************************
  7. *        FFPTIEEE AND FFPFIEEE SUBROUTINES         *
  8. *                                                  *
  9. *   THIS MODULE CONTAINS SINGLE-PRECISION          *
  10. *   CONVERSION ROUTINES FOR IEEE FORMAT FLOATING   *
  11. *   POINT (DRAFT 8.0) TO AND FROM MOTOROLA FAST    *
  12. *   FLOATING POINT (FFP) VALUES.                   *
  13. *   THESE CAN BE USED WHEN LARGE GROUPS OF NUMBERS *
  14. *   NEED TO BE CONVERTED BETWEEN FORMATS.  SEE     *
  15. *   THE MC68344 USER'S GUIDE FOR A FULLER          *
  16. *   EXPLANATION OF THE VARIOUS METHODS FOR IEEE    *
  17. *   FORMAT SUPPORT.                                *
  18. *                                                  *
  19. *   THE FAST FLOATING POINT (NON-IEEE FORMAT)      *
  20. *   PROVIDES RESULTS AS PRECISE AS THOSE REQUIRED  *
  21. *   BY THE IEEE SPECIFICATION.  HOWEVER, THIS      *
  22. *   FORMAT HAS SOME MINOR DIFFERENCES:             *
  23. *    1) IF THE TRUE RESULT OF AN OPERATION         *
  24. *       IS EXACTLY BETWEEN REPRESENTABLE           *
  25. *       VALUES, THE FFP ROUND-TO-NEAREST           *
  26. *       FUNCTION MAY ROUND TO EITHER EVEN OR ODD.  *
  27. *    2) THE FFP EXPONENT ALLOWS HALF OF THE RANGE  *
  28. *       THAT THE SINGLE-PRECISION IEEE FORMAT      *
  29. *       PROVIDES (APPROX. 10 TO THE +-19 DECIMAL). *
  30. *    3) THE IEEE FORMAT SPECIFIES INFINITY,        *
  31. *       NOT-A-NUMBER, AND DENORMALIZED DATA        *
  32. *       TYPES THAT ARE NOT DIRECTLY SUPPORTED      *
  33. *       BY THE FFP FORMAT.  HOWEVER, THEY MAY BE   *
  34. *       ADDED VIA CUSTOMIZING OR USED VIA THE IEEE *
  35. *       FORMAT EQUIVALENT COMPATIBLE CALLS         *
  36. *       DESCRIBED IN THE MC68344 USER'S GUIDE.     *
  37. *    4) ALL ZEROES ARE CONSIDERED POSITIVE         *
  38. *       IN FFP FORMAT.                             *
  39. *    5) THE SLIGHTLY HIGHER PRECISION MULTIPLY     *
  40. *       ROUTINE "FFPMUL2" SHOULD BE SUBSTITUTED    *
  41. *       FOR THE DEFAULT ROUTINE "FFPMUL" FOR       *
  42. *       COMPLETELY EQUIVALENT PRECISION.           *
  43. *                                                  *
  44. ****************************************************
  45.          PAGE
  46. FFPIEEE  IDNT   1,1  FFP CONVERSIONS TO/FROM IEEE FORMAT
  47.  
  48.          SECTION   9
  49.  
  50.          XDEF      FFPTIEEE,FFPFIEEE
  51.  
  52. ****************************************************
  53. *               FFPTIEEE                           *
  54. *                                                  *
  55. *  FAST FLOATING POINT TO IEEE FORMAT              *
  56. *                                                  *
  57. *   INPUT:   D7 - FAST FLOATING POINT VALUE        *
  58. *                                                  *
  59. *   OUTPUT:  D7 - IEEE FORMAT FLOATING POINT VALUE *
  60. *                                                  *
  61. *   CONDITION CODES:                               *
  62. *            N - SET IF THE RESULT IS NEGATIVE     *
  63. *            Z - SET IF THE RESULT IS ZERO         *
  64. *            V - UNDEFINED                         *
  65. *            C - UNDEFINED                         *
  66. *            X - UNDEFINED                         *
  67. *                                                  *
  68. *   NOTES:                                         *
  69. *     1) NO WORK STORAGE OR REGISTERS REQUIRED.    *
  70. *     2) ALL ZEROES WILL BE CONVERTED POSITIVE.    *
  71. *     3) NO NOT-A-NUMBER, INIFINITY, DENORMALIZED, *
  72. *        OR INDEFINITES GENERATED. (UNLESS         *
  73. *        USER CUSTOMIZED.)                         *
  74. *                                                  *
  75. *   TIMES (ASSUMING IN-LINE CODE):                 *
  76. *           VALUE ZERO      18 CYCLES              *
  77. *           VALUE NOT ZERO  66 CYCLES              *
  78. *                                                  *
  79. ****************************************************
  80.  
  81. FFPTIEEE EQU       *
  82.  
  83.          ADD.L     D7,D7     DELETE MANTISSA HIGH BIT
  84.          BEQ.S     DONE1     BRANCH ZERO AS FINISHED
  85.          EOR.B     #$80,D7   TO TWOS COMPLEMENT EXPONENT
  86.          ASR.B     #1,D7     FORM 8-BIT EXPONENT
  87.          SUB.B     #$82,D7   ADJUST 64 TO 127 AND EXCESSIZE
  88.          SWAP.W    D7        SWAP FOR HIGH BYTE PLACEMENT
  89.          ROL.L     #7,D7     SET SIGN+EXP IN HIGH BYTE
  90. DONE1    EQU       *
  91.  
  92.          RTS                 RETURN TO CALLER
  93.          PAGE
  94. ************************************************************
  95. *                     FFPFIEEE                             *
  96. *         FAST FLOATING POINT FROM IEEE FORMAT             *
  97. *                                                          *
  98. *   INPUT:   D7 - IEEE FORMAT FLOATING POINT VALUE         *
  99. *   OUTPUT:  D7 - FFP FORMAT FLOATING POINT VALUE          *
  100. *                                                          *
  101. *   CONDITION CODES:                                       *
  102. *            N - UNDEFINED                                 *
  103. *            Z - SET IF THE RESULT IS ZERO                 *
  104. *            V - SET IF RESULT OVERFLOWED FFP FORMAT       *
  105. *            C - UNDEFINED                                 *
  106. *            X - UNDEFINED                                 *
  107. *                                                          *
  108. *   NOTES:                                                 *
  109. *     1) REGISTER D5 IS USED FOR WORK STORAGE AND NOT      *
  110. *        TRANSPARENT.                                      *
  111. *     2) NOT-A-NUMBER, INIFINITY, AND DENORMALIZED         *
  112. *        TYPES AS WELL AS AN EXPONENT OUTSIDE OF FFP RANGE *
  113. *        GENERATE A BRANCH TO A SPECIFIC PART OF THE       *
  114. *        ROUTINE.  CUSTOMIZING MAY EASILY BE DONE THERE.   *
  115. *                                                          *
  116. *        THE DEFAULT ACTIONS FOR THE VARIOUS TYPES ARE:    *
  117. *      LABEL      TYPE         DEFAULT SUBSTITUTION        *
  118. *      -----      ----         --------------------        *
  119. *       NAN    NOT-A-NUMBER    ZERO                        *
  120. *       INF    INFINITY        LARGEST FFP VALUE SAME SIGN *
  121. *                              ("V" SET IN CCR)            *
  122. *       DENOR  DENORMALIZED    ZERO                        *
  123. *       EXPHI  EXP TOO LARGE   LARGEST FFP VALUE SAME SIGN *
  124. *                              ("V" SET IN CCR)            *
  125. *       EXPLO  EXP TOO SMALL   ZERO                        *
  126. *                                                          *
  127. *   TIMES (ASSUMING IN-LINE CODE):                         *
  128. *           VALUE ZERO      78 CYCLES                      *
  129. *           VALUE NOT ZERO  72 CYCLES                      *
  130. *                                                          *
  131. ************************************************************
  132.  
  133. VBIT     EQU       $02       CONDITION CODE REGISTER "V" BIT MASK
  134.  
  135. FFPFIEEE EQU       *
  136.  
  137.          SWAP.W    D7        SWAP WORD HALVES
  138.          ROR.L     #7,D7     EXPONENT TO LOW BYTE
  139.          MOVE.L    #-128,D5  LOAD $80 MASK IN WORK REGISTER
  140.          EOR.B     D5,D7     CONVERT FROM EXCESS 127 TO TWO'S-COMPLEMENT
  141.          ADD.B     D7,D7     FROM 8 TO 7 BIT EXPONENT
  142.          BVS.S     FFPOVF    BRANCH WILL NOT FIT
  143.          ADD.B     #2<<1+1,D7 ADJUST EXCESS 127 TO 64 AND SET MANTISSA HIGH BIT
  144.          BVS.S     EXPHI     BRANCH EXPONENT TOO LARGE (OVERFLOW)
  145.          EOR.B     D5,D7     BACK TO EXCESS 64
  146.          ROR.L     #1,D7     TO FAST FLOAT REPRESENTATION ("V" CLEARED)
  147. DONE2    EQU       *
  148.  
  149.          RTS                 RETURN TO CALLER
  150.          PAGE
  151. * OVERFLOW DETECTED - CAUSED BY ONE OF THE FOLLOWING:
  152. *        - FALSE OVERFLOW DUE TO DIFFERENCE BETWEEN EXCESS 127 AND 64 FORMAT
  153. *        - EXPONENT TOO HIGH OR LOW TO FIT IN 7 BITS (EXPONENT OVER/UNDERFLOW)
  154. *        - AN EXPONENT OF $FF REPRESENTING AN INFINITY
  155. *        - AN EXPONENT OF $00 REPRESENTING A ZERO, NAN, OR DENORMALIZED VALUE
  156. FFPOVF   BCC.S     FFPOVLW   BRANCH IF OVERFLOW (EXPONENT $FF OR TOO LARGE)
  157. * OVERFLOW - CHECK FOR POSSIBLE FALSE OVERFLOW DUE TO DIFFERENT EXCESS 
  158. FORMATS
  159.          CMP.B     #$7C,D7   ? WAS ORIGINAL ARGUMENT REALLY IN RANGE
  160.          BEQ.S     FFPOVFLS  YES, BRANCH FALSE OVERFLOW
  161.          CMP.B     #$7E,D7   ? WAS ORIGINAL ARGUMENT REALLY IN RANGE
  162.          BNE.S     FFPTOVF   NO, BRANCH TRUE OVERFLOW
  163. FFPOVFLS ADD.B     #$80+2<<1+1,D7  EXCESS 64 ADJUSTMENT AND MANTISSA HIGH BIT
  164.          ROR.L     #1,D7     FINALIZE TO FAST FLOATING POINT FORMAT
  165.          TST.B     D7        INSURE NO ILLEGAL ZERO SIGN+EXPONENT BYTE
  166.          BNE.S     DONE2     DONE IF DOES NOT SET S+EXP ALL ZEROES
  167.          BRA.S     EXPLO     TREAT AS UNDERFLOWED EXPONENT OTHERWISE
  168. * EXPONENT LOW - CHECK FOR ZERO, DENORMALIZED VALUE, OR TOO SMALL AN 
  169. EXPONENT
  170. FFPTOVF  AND.W     #$FEFF,D7 CLEAR SIGN BIT OUT
  171.          TST.L     D7        ? ENTIRE VALUE NOW ZERO
  172.          BEQ.S     DONE2     BRANCH IF VALUE IS ZERO
  173.          TST.B     D7        ? DENORMALIZED NUMBER (SIGNIFICANT#0, EXP=0)
  174.          BEQ.S     DENOR     BRANCH IF DENORMALIZED
  175.  
  176. ***************
  177. *****EXPLO - EXPONENT TO SMALL FOR FFP FORMAT
  178. ***************
  179. *  THE SIGN BIT WILL BE BIT 8.
  180. EXPLO    MOVE.L    #0,D7     DEFAULT ZERO FOR THIS CASE ("V" CLEARED)
  181.          BRA.S     DONE2     RETURN TO MAINLINE
  182.  
  183. ***************
  184. *****DENOR - DENORMALIZED NUMBER
  185. ***************
  186. DENOR    MOVE.L    #0,D7     DEFAULT IS TO RETURN A ZERO ("V" CLEARED)
  187.          BRA.S     DONE2     RETURN TO MAINLINE
  188.  
  189. * EXPONENT HIGH - CHECK FOR EXPONENT TOO HIGH, INFINITY, OR NAN
  190. FFPOVLW  CMP.B     #$FE,D7   ? WAS ORIGINAL EXPONENT $FF
  191.          BNE.S     EXPHI     NO, BRANCH EXPONENT TOO LARGE
  192.          LSR.L     #8,D7     SHIFT OUT EXPONENT
  193.          LSR.L     #1,D7     SHIFT OUT SIGN
  194.          BNE.S     NAN       BRANCH NOT-A-NUMBER
  195.  
  196. ***************
  197. *****INF - INFINITY
  198. ***************
  199. *  THE CARRY AND X BIT REPRESENT THE SIGN
  200. INF      MOVE.L    #-1,D7    SETUP MAXIMUM FFP VALUE
  201.          ROXR.B    #1,D7     SHIFT IN SIGN
  202.          OR.B      #VBIT,CCR SHOW OVERFLOW OCCURED
  203.          BRA.S     DONE2     RETURN WITH MAXIMUM SAME SIGN TO MAINLINE
  204.  
  205. ***************
  206. *****EXPHI - EXPONENT TO LARGE FOR FFP FORMAT
  207. ***************
  208. *  THE SIGN BIT WILL BE BIT 8.
  209. EXPHI    LSL.W     #8,D7     SET X BIT TO SIGN
  210.          MOVE.L    #-1,D7    SETUP MAXIMUM NUMBER
  211.          ROXR.B    #1,D7     SHIFT IN SIGN
  212.          OR.B      #VBIT,CCR SHOW OVERFLOW OCURRED
  213.          BRA.S     DONE2     RETURN MAXIMUM SAME SIGN TO MAINLINE
  214.  
  215. ***************
  216. *****NAN - NOT-A-NUMBER
  217. ***************
  218. * BITS 0 THRU 22 CONTAIN THE NAN DATA FIELD
  219. NAN      MOVE.L    #0,D7     DEFAULT TO A ZERO ("V" BIT CLEARED)
  220.          BRA.S     DONE2     RETURN TO MAINLINE
  221.  
  222.          END
  223.  
  224.